<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>4闭包作用</title>
</head>
<body>

1. 没有闭包，外部函数数据一执行完，数据就释放，
2. 对于局部变量(嵌套函数内)，外部函数无法看见。通过闭包控制内部变量

闭包作用：隐藏变量
    * 使用函数内部的变量在函数执行完后，仍然存在内存中(延长了局部变量生命周期)，即下面的 a 变量
    * 让函数外部(fn1)可以访问函数内部(fn2/fn3)的数据(变量/函数)

作用域链：子可以一层层的向父级寻找数据，但父函数却不能访问子函数数据
    闭包就是打破了这种规则，父级可以访问子级的数据

子函数可以决定父函数怎么操作子函数的数据

1. 函数执行完后，函数内部声明的局部变量是否存在？   一般不存在，存在于闭包中的变量才可能存在
2. 在函数外部能直接访问函数内部的局部变量？ 不能，我们可以通过闭包让外部操作它
<script type='text/javascript'>
    function fn1() {
        var a = 1;
        function fn2() {
            a++;
            console.log(a);
            //return a;
        }
        //return fn2;
        function fn3() {
            a--
        }
        return fn3;
    }
    var f = fn1()//fn1()这样写，则
    f();// 1
    f();// 0
</script>
</body>
</html>